Remember-Me Authentication হল একটি ফিচার যা ব্যবহারকারীদের long-term authentication প্রদান করতে ব্যবহৃত হয়, অর্থাৎ ব্যবহারকারী একবার লগইন করলে তারা তাদের ব্রাউজার বন্ধ করার পরও কয়েক দিন বা সপ্তাহ ধরে সিস্টেমে লগইন থাকতে পারে। এই ফিচারটি session-based authentication এর উপর ভিত্তি করে কাজ করে, কিন্তু এতে লগইন টোকেনটি দীর্ঘ সময়ের জন্য সংরক্ষণ করা হয়।
Remember-Me Authentication সাধারণত সাইটে user convenience বাড়ানোর জন্য ব্যবহৃত হয়, যেমন ব্যবহারকারীকে পুনরায় লগইন করতে না দেওয়া বা সেশন টাইমআউটের পরও লগইন রাখা।
How Does Remember-Me Authentication Work?
- First Authentication (Login):
- ব্যবহারকারী প্রথমবার লগইন করার সময় একটি cookie তৈরি হয়।
- এই cookie-তে authentication token সংরক্ষিত থাকে, যা পরবর্তীতে ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে লগইন করার অনুমতি দেয়।
- Storing Remember-Me Cookie:
- লগইন সফল হলে, Spring Security ব্যবহারকারীকে একটি "Remember-Me" cookie প্রদান করে। এটি একটি দীর্ঘমেয়াদী cookie যা সাধারণত ব্রাউজারে সংরক্ষিত থাকে।
- পরবর্তীতে ব্রাউজার যদি একই সাইটে ফেরত আসে, Spring Security এই cookie দেখে ব্যবহারকারীকে পুনরায় authenticate করে।
- Validating the Token:
- cookie-তে সংরক্ষিত token-এর সাহায্যে Spring Security ব্যবহারকারীকে পুনরায় শনাক্ত করে এবং একটি নতুন session তৈরি করে, যাতে ব্যবহারকারীকে পুনরায় লগইন করার প্রয়োজন না হয়।
Spring Security তে Remember-Me Authentication কনফিগারেশন
Spring Security তে Remember-Me Authentication কনফিগার করতে আপনাকে HttpSecurity কনফিগারেশন সেটআপ করতে হবে। এই কনফিগারেশনে ব্যবহারকারী লগইন সফল হলে একটি "remember-me" cookie তৈরি হবে এবং এটি দীর্ঘ সময় পর্যন্ত সিস্টেমে লগইন অবস্থায় থাকবে।
1. Maven Dependency
Spring Security-এর Remember-Me ফিচার ব্যবহার করার জন্য আপনাকে Spring Security Starter Dependency যোগ করতে হবে।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2. Remember-Me Authentication কনফিগারেশন উদাহরণ
i. Basic Configuration with Remember-Me
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login", "/register").permitAll() // Allow access to login and register pages
.anyRequest().authenticated() // All other requests need authentication
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.rememberMe() // Enable Remember-Me functionality
.key("mySecretKey") // Set a secret key for generating the Remember-Me token
.tokenValiditySeconds(86400) // Token validity (in seconds), here it is 24 hours (86400 seconds)
.and()
.logout()
.permitAll();
}
}
rememberMe(): এটি Remember-Me ফিচার সক্ষম করে।key("mySecretKey"): একটি key সেট করা হয়, যা টোকেন তৈরির জন্য ব্যবহৃত হয়। এই key-টি সাধারণত সিকিউরিটির জন্য একে অপরের সাথে মেলানো হয়।tokenValiditySeconds(86400): এটি টোকেনের বৈধতার সময় নির্ধারণ করে। এখানে এটি 24 ঘণ্টা (86400 সেকেন্ড)।
3. Remember-Me Cookie Configuration
Spring Security Remember-Me ফিচার স্বয়ংক্রিয়ভাবে cookie তৈরি করে, যা username এবং authentication token ধারণ করে। এই cookie ব্যবহারকারীর ব্রাউজারে সেভ হয় এবং পরবর্তীতে ব্যবহারকারী সাইটে আসলে এটি চেক করা হয়।
Example of Remember-Me Cookie:
remember-me=abcd1234token; Expires=Thu, 19 Aug 2024 12:00:00 GMT; Path=/; HttpOnly
- Token: এটি authentication token যা Spring Security দ্বারা জেনারেট করা হয়।
- Expires: এই cookie-এর মেয়াদ শেষ হওয়ার সময় নির্ধারণ করে।
- HttpOnly: এটি cookie-কে JavaScript থেকে অ্যাক্সেস করার সুযোগ সীমিত করে।
4. Remember-Me Authentication Process
- Login Process:
- ব্যবহারকারী username এবং password দিয়ে লগইন করলে, Remember-Me অপশন চেক করা হলে একটি বিশেষ Remember-Me token তৈরি হবে।
- এই টোকেনটি ব্যবহারকারীর ব্রাউজারে cookie হিসেবে সংরক্ষিত থাকবে।
- Token Validation:
- পরবর্তী সময়ে যখন ব্যবহারকারী একই ব্রাউজার ব্যবহার করে সাইটে প্রবেশ করবে, তখন Remember-Me cookie চেক করা হবে। যদি cookie বৈধ থাকে, Spring Security ব্যবহারকারীকে automatically logged-in করে দিবে।
- Logout Process:
- ব্যবহারকারী লগআউট করলে Remember-Me cookie মুছে ফেলা হয় এবং পরবর্তী সময়ে তাকে আবার লগইন করতে হবে।
5. Customizing Remember-Me Token Repository
Spring Security ডিফল্টভাবে PersistentTokenRepository ব্যবহার করে, কিন্তু আপনি এটি কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ, একটি ডাটাবেসে Remember-Me টোকেন সেভ করতে পারেন।
i. Custom Persistent Token Repository
import org.springframework.security.web.authentication.rememberme.PersistentToken;
import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository;
import org.springframework.stereotype.Component;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
@Component
public class CustomTokenRepository implements PersistentTokenRepository {
private final JdbcTemplate jdbcTemplate;
public CustomTokenRepository(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public void createNewToken(PersistentToken token) {
// SQL query to store token in DB
}
@Override
public void updateToken(String series, String tokenValue, LocalDateTime lastUsed) {
// SQL query to update token in DB
}
@Override
public PersistentToken getTokenForSeries(String seriesId) {
// SQL query to retrieve token from DB
return null;
}
@Override
public void removeUserTokens(String username) {
// SQL query to remove tokens for the user
}
}
ii. Configure Custom Token Repository
http
.rememberMe()
.tokenRepository(customTokenRepository)
.key("mySecretKey")
.tokenValiditySeconds(86400);
Advantages of Remember-Me Authentication
- User Convenience: ব্যবহারকারীদের প্রতিবার লগইন করতে না দেওয়া এবং সিস্টেমে দীর্ঘ সময় থাকার সুবিধা।
- Improved User Experience: ব্যবহারকারীকে সাইটে ফিরে আসলে স্বয়ংক্রিয়ভাবে লগইন করা যায়।
- Security: Spring Security এর মাধ্যমে Remember-Me টোকেন নিরাপদে তৈরি এবং যাচাই করা হয়।
Disadvantages or Considerations
- Security Risks: Remember-Me ফিচার যদি সঠিকভাবে কনফিগার না করা হয়, তবে এটি নিরাপত্তার জন্য ঝুঁকিপূর্ণ হতে পারে। বিশেষত longer expiration time টোকেনের মাধ্যমে আক্রমণকারী যদি টোকেন চুরি করে তবে তারা দীর্ঘ সময় ধরে অ্যাক্সেস পেতে পারে।
- Token Expiration: টোকেনের বৈধতা শেষ হলে ব্যবহারকারীকে আবার লগইন করতে হবে।
Conclusion
Spring Security তে Remember-Me Authentication একটি শক্তিশালী ফিচার যা ব্যবহারকারীদের সিস্টেমে দীর্ঘ সময় ধরে লগইন অবস্থায় রাখতে সহায়ক। এটি সহজে কনফিগার করা যায় এবং এর মাধ্যমে ব্যবহারকারী অভিজ্ঞতা উন্নত করা যায়, তবে সঠিক নিরাপত্তা কনফিগারেশন নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ।